home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / DB / QueryTool / Result.php < prev   
PHP Script  |  2004-10-01  |  6KB  |  251 lines

  1. <?php
  2. // +----------------------------------------------------------------------+
  3. // | PHP Version 4                                                        |
  4. // +----------------------------------------------------------------------+
  5. // | Copyright (c) 1997-2003 The PHP Group                                |
  6. // +----------------------------------------------------------------------+
  7. // | This source file is subject to version 2.02 of the PHP license,      |
  8. // | that is bundled with this package in the file LICENSE, and is        |
  9. // | available at through the world-wide-web at                           |
  10. // | http://www.php.net/license/2_02.txt.                                 |
  11. // | If you did not receive a copy of the PHP license and are unable to   |
  12. // | obtain it through the world-wide-web, please send a note to          |
  13. // | license@php.net so we can mail you a copy immediately.               |
  14. // +----------------------------------------------------------------------+
  15. // | Author:  Wolfram Kriesing, Paolo Panto, vision:produktion <wk@visionp.de>
  16. // +----------------------------------------------------------------------+
  17. //
  18. // $Id: Result.php,v 1.7 2004/04/27 23:36:38 quipo Exp $
  19. //
  20.  
  21. /**
  22.  * this result actually contains the 'data' itself, the number of rows
  23.  * returned and some additional info
  24.  * using ZE2 you can also get retreive data from the result doing the following:
  25.  * <vp_DB_Common-instance>->getAll()->getCount()
  26.  * or
  27.  * <vp_DB_Common-instance>->getAll()->getData()
  28.  *
  29.  *
  30.  * @package    DB_QueryTool
  31.  * @version    2002/07/11
  32.  * @access     public
  33.  * @author     Wolfram Kriesing <wolfram@kriesing.de>
  34.  */
  35. class DB_QueryTool_Result
  36. {
  37.     // {{{ class vars
  38.  
  39.     /**
  40.      * @var array
  41.      */
  42.     var $_data = array();
  43.  
  44.     /**
  45.      * @var array
  46.      */
  47.     var $_dataKeys = array();
  48.  
  49.     /**
  50.      * @var integer
  51.      */
  52.     var $_count = 0;
  53.  
  54.     /**
  55.      * the counter for the methods getFirst, getNext
  56.      * @var array
  57.      */
  58.     var $_counter = null;
  59.  
  60.     // }}}
  61.     // {{{ DB_QueryTool_Result()
  62.  
  63.     /**
  64.      * create a new instance of result with the data returned by the query
  65.      *
  66.      * @version    2002/07/11
  67.      * @access     public
  68.      * @author     Wolfram Kriesing <wolfram@kriesing.de>
  69.      * @param      array   the data returned by the result
  70.      */
  71.     function DB_QueryTool_Result($data)
  72.     {
  73.         if (!count($data)) {
  74.             $this->_count = 0;
  75.         } else {
  76.             list($firstElement) = $data;
  77.             if (is_array($firstElement)) { // is the array a collection of rows?
  78.                 $this->_count = sizeof($data);
  79.             } else {
  80.                 if (sizeof($data) > 0) {
  81.                     $this->_count = 1;
  82.                 } else {
  83.                     $this->_count = 0;
  84.                 }
  85.             }
  86.         }
  87.         $this->_data = $data;
  88.     }
  89.  
  90.     // }}}
  91.     // {{{ numRows
  92.  
  93.     /**
  94.      * return the number of rows returned. This is an alias for getCount().
  95.      *
  96.      * @access    public
  97.      * @return    integer
  98.      */
  99.     function numRows()
  100.     {
  101.         return $this->_count;
  102.     }
  103.  
  104.     // }}}
  105.     // {{{ getCount()
  106.  
  107.     /**
  108.      * return the number of rows returned
  109.      *
  110.      * @version    2002/07/11
  111.      * @access     public
  112.      * @author     Wolfram Kriesing <wolfram@kriesing.de>
  113.      * @return integer the number of rows returned
  114.      */
  115.     function getCount()
  116.     {
  117.         return $this->_count;
  118.     }
  119.  
  120.     // }}}
  121.     // {{{ getData()
  122.  
  123.     /**
  124.      * get all the data returned
  125.      *
  126.      * @version    2002/07/11
  127.      * @access     public
  128.      * @author     Wolfram Kriesing <wolfram@kriesing.de>
  129.      * @param      string $key
  130.      * @return mixed array or PEAR_Error
  131.      */
  132.     function getData($key=null)
  133.     {
  134.         if (is_null($key)) {
  135.             return $this->_data;
  136.         }
  137.         if ($this->_data[$key]) {
  138.             return $this->_data[$key];
  139.         }
  140.         return new PEAR_Error("there is no element with the key '$key'!");
  141.     }
  142.  
  143.     // }}}
  144.     // {{{ getFirst()
  145.  
  146.     /**
  147.      * get the first result set
  148.      * we are not using next, current, and reset, since those ignore keys
  149.      * which are empty or 0
  150.      *
  151.      * @version    2002/07/11
  152.      * @access     public
  153.      * @author     Wolfram Kriesing <wolfram@kriesing.de>
  154.      * @return mixed
  155.      */
  156.     function getFirst()
  157.     {
  158.         if ($this->getCount() > 0) {
  159.             $this->_dataKeys = array_keys($this->_data);
  160.             $this->_counter = 0;
  161.             return $this->_data[$this->_dataKeys[$this->_counter]];
  162.         }
  163.         return new PEAR_Error('There are no elements!');
  164.     }
  165.  
  166.     // }}}
  167.     // {{{ getNext()
  168.  
  169.     /**
  170.      * Get next result set. If getFirst() has never been called before,
  171.      * it calls that method.
  172.      * @return mixed
  173.      * @access public
  174.      */
  175.     function getNext()
  176.     {
  177.         if (!$this->initDone()) {
  178.             return $this->getFirst();
  179.         }
  180.         if ($this->hasMore()) {
  181.             $this->_counter++;
  182.             return $this->_data[$this->_dataKeys[$this->_counter]];
  183.         }
  184.         return new PEAR_Error('there are no more elements!');
  185.     }
  186.  
  187.     // }}}
  188.     // {{{ hasMore()
  189.  
  190.     /**
  191.      * check if there are other rows
  192.      *
  193.      * @return boolean
  194.      * @access public
  195.      */
  196.     function hasMore()
  197.     {
  198.         if ($this->_counter+1 < $this->getCount()) {
  199.             return true;
  200.         }
  201.         return false;
  202.     }
  203.  
  204.     // }}}
  205.     // {{{ fetchRow
  206.  
  207.     /**
  208.      * This function emulates PEAR::DB fetchRow() method.
  209.      * With this method, DB_QueryTool can transparently replace PEAR_DB
  210.      *
  211.      * @todo implement fetchmode support?
  212.      * @access    public
  213.      * @return    void
  214.      */
  215.     function fetchRow()
  216.     {
  217.         if ($this->hasMore()) {
  218.             $arr = $this->getNext();
  219.             if (!PEAR::isError($arr)) {
  220.                 return $arr;
  221.             }
  222.         }
  223.         return false;
  224.     }
  225.  
  226.     // }}}
  227.     // {{{ initDone
  228.  
  229.     /**
  230.      * Helper method. Check if $this->_dataKeys has been initialized
  231.      *
  232.      * @return boolean
  233.      * @access private
  234.      */
  235.     function initDone()
  236.     {
  237.         return (
  238.             isset($this->_dataKeys) &&
  239.             is_array($this->_dataKeys) &&
  240.             count($this->_dataKeys)
  241.         );
  242.     }
  243.  
  244.     // }}}
  245.  
  246.     #TODO
  247.     #function getPrevious()
  248.     #function getLast()
  249.  
  250. }
  251. ?>